import axios from 'axios';
import { ElMessage } from 'element-plus';
// import { refresh } from '@/api/token'
import { userStore } from '@/store';
import { excludeUri } from './str';
import router from '@/router';

const exclude = ['/login', '/captchaImage'];

// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项，表示请求URL公共部分
	baseURL: '/api',
	// headers: { 'Content-Type': 'application/json' },
	// 超时
	timeout: 15000,
});
// request拦截器
service.interceptors.request.use(
	(config) => {
		const user = userStore();
		// 是否需要防止数据重复提交
		// const isRepeatSubmit = (config.headers || {}).repeatSubmit === false

		if (user.getTokenInfo) {
			config.headers.Authorization = user.getTokenInfo; // 让每个请求携带自定义token 请根据实际情况自行修改
		}
		// if (!isRepeatSubmit && config.method === 'post') {
		//   config.data = typeof config.data === 'object' ? JSON.stringify(config.data) : config
		// }
		return config;
	},
	(error) => {
		console.log(error);
		new Promise().reject(error);
	}
);

// 响应拦截器
service.interceptors.response.use(
	(res) => {
		const user = userStore();
		// 二进制数据则直接返回
		if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
			return res.data;
		}

		// if (res.headers.isRefreshToken) {
		//   // 异步调用请求
		//   refresh().then(res => {
		//     if (res.data.status === 200) {
		//       user.setToken(res.data.token)
		//       // setToken(res.data.token)
		//     }
		//   })
		// }
		if (res.data.status === 498 || res.data.status === 403) {
			user.removeToken();
			router.push({ path: '/login' });
		}
		if (res.data.status !== 200) {
			ElMessage({
				type: 'error',
				message: res.data.msg,
				duration: 5 * 1000,
			});
			return Promise.reject(res.data);
		} else {
			return res.data;
		}
	},
	(error) => {
		let { msg } = error;
		if (msg === 'Network Error') {
			msg = '后端接口连接异常';
		} else if (msg.includes('timeout')) {
			msg = '系统接口请求超时';
		} else if (msg.includes('Request failed with status code')) {
			msg = '系统接口' + msg.substr(msg.length - 3) + '异常';
		}
		ElMessage({
			type: 'error',
			message: msg,
			duration: 5 * 1000,
		});
	}
);

export default service;
